package fr.uniscol.dao.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import fr.uniscol.dao.IAnneeScolaireDao;
import fr.uniscol.model.AnneeScolaire;

public class AnneeScolaireDaoImpl implements IAnneeScolaireDao {

	private SessionFactory sessionFactory;

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public List<AnneeScolaire> getAllAnneesScolaires() {
		
		List<AnneeScolaire> annees = new ArrayList<AnneeScolaire>();
		
		Session session = sessionFactory.getCurrentSession();
		
		Query q = session.createQuery("From AnneeScolaire");
		
		List<AnneeScolaire> result = q.list();
		Iterator<AnneeScolaire> it = result.iterator();
		while(it.hasNext()){
			annees.add(it.next());
		}
		
		return annees;
	}

	public AnneeScolaire getAnneeScolaire(String anneeId) {
		
		AnneeScolaire ret = null;
		
		Session session = sessionFactory.getCurrentSession();
		
		ret = (AnneeScolaire) session.get(AnneeScolaire.class, anneeId);
		
		return ret;
	}

	public AnneeScolaire getDefaultAnneeScolaire(String uai) {
		
		AnneeScolaire ret = null;
		
		Session session = sessionFactory.getCurrentSession();
		
		Query q = session.createQuery("From AnneeScolaire Where uai=:uai");
		q.setParameter("uai", uai);
		
		Iterator it = q.iterate();
		while(it.hasNext()){
			ret = (AnneeScolaire) it.next();
		}
		
		Hibernate.initialize(ret.getEtablissement());
		Hibernate.initialize(ret.getPeriodes());
		
		return ret;
	}

	public void supprimerAnneeScolaire(String anneeId) {
		
		Session session = sessionFactory.getCurrentSession();
		
		AnneeScolaire annee = getAnneeScolaire(anneeId);
		
		session.delete(annee);
	}

	public void verrouillerAnneeScolaire(String anneeId, boolean verrouillee) {
	}

	public void archiverAnneeScolaire(String anneeId) {
	}

	public void enregistrerAnneeScolaire(AnneeScolaire annee) {
		
		Session session = sessionFactory.getCurrentSession();
		
		session.saveOrUpdate(annee);
	}
}
